﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace Speedy
{
    public class Synchronizer : IDisposable
    {

        enum EvrakCinsi : byte
        {
            SatisFaturasi = 21,
            AlinanSiparis = 10,
            SatisIadeFaturasi = 20,
            DepoSevk = 24,
            Tahsilat = 31,
            IadeFaturasi = 0
        }

        ISynchronizer instance;

        public Synchronizer()
        {
            string defaultval = "";
            if (Config.GetConfig.GetValue(CParams.Db).IndexOf("Mikro") > -1)
                defaultval = "Mikro V12";
            else
                defaultval = "WorkGroup";

            if (Config.GetConfig.GetValue(CParams.ProgramType, defaultval) == "WorkGroup")
                instance = new syncWorkGrup();
            else
                instance = new syncMikroV12();
        }

        Dictionary<int, int> kdv_oranlari { get; set; }
        int kdvSirasi(int oran)
        {
            int sira = 0;
            foreach (int key in kdv_oranlari.Keys)
            {
                if (kdv_oranlari[key] == oran)
                {
                    sira = key;
                    break;
                }
            }
            return sira;
        }

        void TemsilciBazindaAtama()
        {
            int hafta = Convert.ToInt32(Config.GetConfig.GetValue(CParams.newCustomerRouteWeek, "5"));
            if (Config.GetConfig.GetValue(CParams.newCustomerRoute, "false").ToLower() == "true")
            {
                DataTable rd = DataLayer.GetLayer.FillData(instance.RouteOlmayanCariler(hafta));
                RouteOlmanyanCariEkle(hafta, rd);
            }

            if (Config.GetConfig.GetValue(CParams.TemsilciBazindaRoute, "true").ToLower() == "true")
            {
                DataTable rd = DataLayer.GetLayer.FillData(instance.TemsilciBazindaRoute());
                RouteOlmanyanCariEkle(1, rd);
            }
        }

        void RouteOlmanyanCariEkle(int hafta, DataTable rd)
        {
            Dictionary<int, int> routeSira = new Dictionary<int, int>();
            for (int i = 1; i < 8; i++)
            {
                routeSira.Clear();
                for (int row = 0; row < rd.Rows.Count; row++)
                {
                    dbRoute r = new dbRoute();
                    int sira;
                    int cari_id;
                    int adres_id;

                    //kayıtlar siliniyor ilk önce
                    r.day_no.SetValue(i);
                    r.merchant_id.SetValue(Convert.ToInt32(rd.Rows[row][1]));
                    r.week_no.SetValue(hafta);

                    if (routeSira.ContainsKey(Convert.ToInt32(rd.Rows[row][1])))
                    {
                        routeSira[Convert.ToInt32(rd.Rows[row][1])] += 1;
                        sira = routeSira[Convert.ToInt32(rd.Rows[row][1])];
                    }
                    else
                    {
                        routeSira.Add(Convert.ToInt32(rd.Rows[row][1]), Convert.ToInt32(rd.Rows[row][3]));
                        sira = Convert.ToInt32(rd.Rows[row][3]);
                    }

                    cari_id = Convert.ToInt32(rd.Rows[row][0]);
                    adres_id = Convert.ToInt32(rd.Rows[row][2]);
                    r.address_id.SetValue(adres_id);
                    r.customer_id.SetValue(cari_id);
                    r.visit_no.SetValue(sira);
                    r.Save();
                }
            }
        }

        void AyniEvrakMevcut(int header_id)
        {
            DataLayer.GetLayer.ExecQuery(string.Format("UPDATE    INVOICE_HEADER SET SAVED_FLAG = 1, DESCRIPTION = N'Aynı Evrak Mevcut'  WHERE     (ID = {0})", header_id));
        }

        void AyniEvrakMevcut(int terminal_id, int evrak_tipi, string evrak_seri, int evrak_sira)
        {
            SqlParameter p1 = new SqlParameter("@terminal", SqlDbType.Int) { Value = terminal_id };
            SqlParameter p2 = new SqlParameter("@tip", SqlDbType.Int) { Value = evrak_tipi };
            SqlParameter p3 = new SqlParameter("@seri", SqlDbType.VarChar) { Value = evrak_seri };
            SqlParameter p4 = new SqlParameter("@sira", SqlDbType.Int) { Value = evrak_sira };
            DataLayer.GetLayer.ExecQuery("UPDATE    STOCK_MOVEMENT SET SAVED_FLAG = 1, DESCRIPTION = N'Aynı Evrak Mevcut'  WHERE      (TERMINAL_ID = @terminal) AND (DOCUMENT_TYPE = @tip) AND (DOCUMENT_SERIAL = @seri) AND (DOCUMENT_NUMBER = @sira)", p1, p2, p3, p4);
        }

        void EvrakBitir(int header_id)
        {
            DataLayer.GetLayer.ExecQuery(string.Format("UPDATE    INVOICE_HEADER SET SAVED_FLAG = 1, DESCRIPTION = N'Aktarıldı'  WHERE     (ID = {0})", header_id));
        }

        void EvrakBitir(int terminal_id, int evrak_tipi, string evrak_seri, int evrak_sira)
        {
            SqlParameter p1 = new SqlParameter("@terminal", SqlDbType.Int) { Value = terminal_id };
            SqlParameter p2 = new SqlParameter("@tip", SqlDbType.Int) { Value = evrak_tipi };
            SqlParameter p3 = new SqlParameter("@seri", SqlDbType.VarChar) { Value = evrak_seri };
            SqlParameter p4 = new SqlParameter("@sira", SqlDbType.Int) { Value = evrak_sira };
            DataLayer.GetLayer.ExecQuery("UPDATE    STOCK_MOVEMENT SET SAVED_FLAG = 1, DESCRIPTION = N'Aktarıldı'  WHERE   (TERMINAL_ID = @terminal) AND (DOCUMENT_TYPE = @tip) AND (DOCUMENT_SERIAL = @seri) AND (DOCUMENT_NUMBER = @sira) ", p1, p2, p3, p4);
        }

        public void EvrakAktar()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(" SELECT     TERMINAL_ID, DOCUMENT_TYPE, INVOICE_SERIES, INVOICE_NUMBER, CUSTOMER_CODE, DOCUMENT_DATE, SUBTOTAL, VAT_TOTAL, DISCOUNT_TOTAL,GENERAL_TOTAL,STORE_CODE,RESPONSIBILITY_CODE,ID,EXPLANATION,BELGE_NO  \r\n");
            sb.Append(" FROM         INVOICE_HEADER \r\n");
            sb.Append(" WHERE     (SENT_FLAG = 1) AND (SAVED_FLAG = 0) \r\n");

            #region Değişkenler
            int _terminal_id;
            int _evrak_tipi;
            string _evrak_seri;
            string _belge_no;
            int _evrak_sira;
            string _cari_kod;
            DateTime _belge_tarihi;
            decimal _ara_toplam;
            decimal _kdv_toplam;
            decimal _indirim_toplam;
            decimal _genel_toplam;
            string _depo_kod;
            string _sorm_kod;
            int _id;
            string _aciklama;
            #endregion

            DataTable evraklar = DataLayer.GetLayer.FillData(sb.ToString());
            kdv_oranlari = instance.KdvSira;

            #region Tahsilat & Fatura Aktarım
            for (int i = 0; i < evraklar.Rows.Count; i++)
            {
                _terminal_id = Convert.ToInt32(evraklar.Rows[i]["TERMINAL_ID"]);
                _evrak_tipi = Convert.ToInt32(evraklar.Rows[i]["DOCUMENT_TYPE"]);
                _evrak_seri = evraklar.Rows[i]["INVOICE_SERIES"].ToString();
                _evrak_sira = Convert.ToInt32(evraklar.Rows[i]["INVOICE_NUMBER"]);
                _cari_kod = evraklar.Rows[i]["CUSTOMER_CODE"].ToString();
                _belge_tarihi = Convert.ToDateTime(evraklar.Rows[i]["DOCUMENT_DATE"]);
                _belge_no = evraklar.Rows[i]["BELGE_NO"].ToString();
                _ara_toplam = Convert.ToDecimal(evraklar.Rows[i]["SUBTOTAL"]);
                _kdv_toplam = Convert.ToDecimal(evraklar.Rows[i]["VAT_TOTAL"]);
                _indirim_toplam = Convert.ToDecimal(evraklar.Rows[i]["DISCOUNT_TOTAL"]);
                _genel_toplam = Convert.ToDecimal(evraklar.Rows[i]["GENERAL_TOTAL"]);
                _depo_kod = evraklar.Rows[i]["STORE_CODE"].ToString();
                _sorm_kod = evraklar.Rows[i]["RESPONSIBILITY_CODE"].ToString();
                _id = Convert.ToInt32(evraklar.Rows[i]["ID"]);
                _aciklama = evraklar.Rows[i]["EXPLANATION"].ToString();

                switch (_evrak_tipi)
                {
                    case 21:
                        if (!instance.EvrakVarmi(_evrak_seri, _evrak_sira, SyncEvrakTipi.SatisFaturasi))
                        {
                            SatisFaturasiEkle(_terminal_id, _evrak_tipi, _evrak_seri, _evrak_sira, _belge_no, _cari_kod, _belge_tarihi, _ara_toplam, _kdv_toplam, _indirim_toplam, _genel_toplam, _depo_kod, _sorm_kod, _id, _aciklama);
                            EvrakBitir(_id);
                        }
                        else
                            AyniEvrakMevcut(_id);
                        break;
                    case 10:
                        if (!instance.EvrakVarmi(_evrak_seri, _evrak_sira, SyncEvrakTipi.AlinanSiparis))
                        {
                            SiparisEkle(_terminal_id, _evrak_tipi, _evrak_seri, _evrak_sira, _cari_kod, _belge_tarihi, _ara_toplam, _kdv_toplam, _indirim_toplam, _genel_toplam, _depo_kod, _sorm_kod, _id);
                            EvrakBitir(_id);
                        }
                        else
                            AyniEvrakMevcut(_id);
                        break;
                    case 30: //tahsilat evrağı
                        if (!instance.EvrakVarmi(_evrak_seri, _evrak_sira, SyncEvrakTipi.Tahsilat))
                        {
                            TahsilatKayit(_id, _terminal_id, _belge_tarihi, _evrak_seri, _evrak_sira, _belge_no, _cari_kod, _genel_toplam);
                            EvrakBitir(_id);
                        }
                        else
                            AyniEvrakMevcut(_id);
                        break;
                    default:
                        break;
                }
            }
            #endregion


            sb = new StringBuilder();
            sb.Append("SELECT     TERMINAL_ID, DOCUMENT_TYPE, DOCUMENT_SERIAL, DOCUMENT_NUMBER  FROM         STOCK_MOVEMENT  WHERE     (SENT_FLAG = 1) AND (SAVED_FLAG = 0)  GROUP BY TERMINAL_ID, DOCUMENT_TYPE, DOCUMENT_SERIAL, DOCUMENT_NUMBER");
            DataTable stokhareketleri = DataLayer.GetLayer.FillData(sb.ToString());
            for (int i = 0; i < stokhareketleri.Rows.Count; i++)
            {
                _terminal_id = Convert.ToInt32(stokhareketleri.Rows[i]["TERMINAL_ID"]);
                _evrak_tipi = Convert.ToInt32(stokhareketleri.Rows[i]["DOCUMENT_TYPE"]);
                _evrak_seri = stokhareketleri.Rows[i]["DOCUMENT_SERIAL"].ToString();
                _evrak_sira = Convert.ToInt32(stokhareketleri.Rows[i]["DOCUMENT_NUMBER"]);

                switch (_evrak_tipi)
                {
                    case 0: //iade faturası
                        if (!instance.EvrakVarmi(_evrak_seri, _evrak_sira, SyncEvrakTipi.IadeFaturasi))
                        {
                            IadeEkle(_terminal_id, _evrak_tipi, _evrak_seri, _evrak_sira, "");
                            EvrakBitir(_terminal_id, _evrak_tipi, _evrak_seri, _evrak_sira);
                        }
                        else
                            AyniEvrakMevcut(_terminal_id, _evrak_tipi, _evrak_seri, _evrak_sira);
                        break;
                    case 40: //araç yükle
                        if (!instance.EvrakVarmi(_evrak_seri, _evrak_sira, SyncEvrakTipi.Transfer))
                        {
                            SevkEkle(_terminal_id, _evrak_tipi, _evrak_seri, _evrak_sira);
                            EvrakBitir(_terminal_id, _evrak_tipi, _evrak_seri, _evrak_sira);
                        }
                        else
                            AyniEvrakMevcut(_terminal_id, _evrak_tipi, _evrak_seri, _evrak_sira);
                        break;
                    case 51: //araç boşalt
                        if (!instance.EvrakVarmi(_evrak_seri, _evrak_sira, SyncEvrakTipi.Transfer))
                        {
                            SevkEkle(_terminal_id, _evrak_tipi, _evrak_seri, _evrak_sira);
                            EvrakBitir(_terminal_id, _evrak_tipi, _evrak_seri, _evrak_sira);
                        }
                        else
                            AyniEvrakMevcut(_terminal_id, _evrak_tipi, _evrak_seri, _evrak_sira);
                        break;
                }
            }

            TemsilciBazindaAtama();

        }

        decimal iskoto_tutar(decimal tutar, decimal oran)
        {
            return tutar * oran / 100;
        }

        enum TerminalBilgiTip
        {
            NakitKasaKodu = 0,
            CekKasaKodu = 1,
            SenetKasaKodu = 2,
            KrediKartiBankaKodu = 3,
            HavaleBankaKodu = 4,
            SorumlulukMerkezi = 5,
            DepoNo = 6,
            PlasiyerNo = 7
        }

        private string TerminalBilgi(TerminalBilgiTip islem, int terminal)
        {
            string param = string.Empty;
            switch (islem)
            {
                case TerminalBilgiTip.NakitKasaKodu:
                    param = "cashCode";
                    break;
                case TerminalBilgiTip.CekKasaKodu:
                    param = "checkCode";
                    break;
                case TerminalBilgiTip.SenetKasaKodu:
                    param = "billCode";
                    break;
                case TerminalBilgiTip.KrediKartiBankaKodu:
                    param = "creditcardCode";
                    break;
                case TerminalBilgiTip.HavaleBankaKodu:
                    param = "transferorderCode";
                    break;
                case TerminalBilgiTip.SorumlulukMerkezi:
                    param = "Responsibility";
                    break;
                case TerminalBilgiTip.DepoNo:
                    param = "Store";
                    break;
                case TerminalBilgiTip.PlasiyerNo:
                    param = "PlasiyerNo";
                    break;
            }
            object val = DataLayer.GetLayer.ExecScalar(string.Format("SELECT     PARAMETER_VALUE  FROM         DEVICE_PARAMETERS  WHERE     (DEVICE_ID = @term) AND (PARAMETER_CODE = '{0}')", param), Prm.Get("@term", terminal));
            if (val != null)
                return val.ToString();
            else
                return "";
        }

        private string GetTevkifatText(int kdvSira, int tevkifatTip)
        {
            string sonuc = "cha_tevkifat" + kdvSira.ToString();
            switch (tevkifatTip)
            {
                case 1:
                    sonuc += "31";
                    break;
                case 2:
                    sonuc += "91";
                    break;
                case 3:
                    sonuc += "21";
                    break;
                case 4:
                    sonuc += "32";
                    break;
                case 5:
                    sonuc += "61";
                    break;
                case 6:
                    sonuc += "45";
                    break;
                default:
                    sonuc += "31";
                    break;
            }
            return sonuc;
        }

        bool TahsilatKayit(int headerId, int terminalId, DateTime belgeTarihi, string seri, int sira, string belgeNo, string cariKod, decimal tutar)
        {
            SqlParameter prmID = new SqlParameter("@id", SqlDbType.Int) { Value = headerId };
            DataTable dt = DataLayer.GetLayer.FillData("SELECT    DOCUMENT_TYPE, CARD_NO, DRAFT_TYPE, BANK, BRANCH, DRAW_DATE, DRAWER, DRAFT_NO, ACCOUNT_CODE, TOTAL FROM         RECEIVING  WHERE     (HEADER_ID = @id)", prmID);
            if (dt.Rows.Count == 0)
                return false;

            #region Değişkenler
            TahsilatTipi document_type;
            string card_no;
            int draft_type;
            string bank;
            string branch;
            DateTime draw_date;
            string drawer;
            string draft_no;
            string account_code;
            decimal total;
            #endregion

            string kasahizkod = string.Empty;
            string refNo = string.Empty;
            string srmMerkezi = TerminalBilgi(TerminalBilgiTip.SorumlulukMerkezi, terminalId);
            string depoKod = TerminalBilgi(TerminalBilgiTip.DepoNo, terminalId);
            string saticiKod = TerminalBilgi(TerminalBilgiTip.PlasiyerNo, terminalId);

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                document_type = (TahsilatTipi)Enum.Parse(typeof(TahsilatTipi), dt.Rows[i]["DOCUMENT_TYPE"].ToString());
                card_no = dt.Rows[i]["CARD_NO"].ToString();
                draft_type = Convert.ToInt32(dt.Rows[i]["DRAFT_TYPE"]);
                bank = dt.Rows[i]["BANK"].ToString();
                branch = dt.Rows[i]["BRANCH"].ToString();
                draw_date = Convert.ToDateTime(dt.Rows[i]["DRAW_DATE"]);
                drawer = dt.Rows[i]["DRAWER"].ToString();
                draft_no = dt.Rows[i]["DRAFT_NO"].ToString();
                account_code = dt.Rows[i]["ACCOUNT_CODE"].ToString();
                total = Convert.ToDecimal(dt.Rows[i]["TOTAL"]);

                switch (document_type)
                {
                    case TahsilatTipi.Nakit:
                        kasahizkod = TerminalBilgi(TerminalBilgiTip.NakitKasaKodu, terminalId);
                        refNo = "";
                        draw_date = belgeTarihi;
                        break;
                    case TahsilatTipi.Cek:
                        kasahizkod = TerminalBilgi(TerminalBilgiTip.CekKasaKodu, terminalId);
                        refNo = instance.TahsilatReferansNo(TahsilatTipi.Cek);
                        break;
                    case TahsilatTipi.Senet:
                        kasahizkod = TerminalBilgi(TerminalBilgiTip.SenetKasaKodu, terminalId);
                        refNo = instance.TahsilatReferansNo(TahsilatTipi.Senet);
                        break;
                    case TahsilatTipi.KrediKarti:
                        kasahizkod = TerminalBilgi(TerminalBilgiTip.KrediKartiBankaKodu, terminalId);
                        refNo = instance.TahsilatReferansNo(TahsilatTipi.KrediKarti);
                        draw_date = belgeTarihi;
                        break;
                    case TahsilatTipi.Havale:
                        kasahizkod = TerminalBilgi(TerminalBilgiTip.HavaleBankaKodu, terminalId);
                        refNo = instance.TahsilatReferansNo(TahsilatTipi.Havale);
                        draw_date = belgeTarihi;
                        break;
                }

                instance.TahsilatEkle(document_type, belgeTarihi, seri, sira, i, belgeNo, cariKod, kasahizkod, total, refNo, srmMerkezi, draw_date, bank, branch, account_code, drawer, card_no, draft_no, depoKod, saticiKod);
            }
            return true;
        }

        bool SatisFaturasiEkle(int terminal_id, int evrak_tipi, string evrak_seri, int evrak_sira, string belgeNo, string cari_kod, DateTime belge_tarihi, decimal ara_toplam, decimal kdv_toplam, decimal indirim_toplam, decimal genel_toplam, string depoKod, string srmKod, int header_id, string aciklama)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(" SELECT     detail.LINE_NUMBER,detail.PROMO_ID, detail.PRODUCT_CODE, detail.AMOUNT, detail.PRICE, detail.DISCOUNT_RATE_1,  \r\n");
            sb.Append(" detail.DISCOUNT_RATE_2, detail.DISCOUNT_RATE_3, detail.DISCOUNT_RATE_4, detail.DISCOUNT_RATE_5,detail.VAT_RATE, detail.DISCOUNT_TOTAL, detail.LINE_TOTAL, detail.LINE_NET_TOTAL,detail.CURRENCY, detail.CURRENCY_RATE,header.PRINTED,detail.TEVKIFAT_TURU,detail.TEVKIFAT_TUTARI \r\n");
            sb.Append(" FROM         INVOICE_HEADER as header INNER JOIN INVOICE_DETAILS as detail ON header.ID = detail.HEADER_ID \r\n");
            sb.Append(" WHERE      (detail.HEADER_ID = @id) \r\n");

            SqlParameter prmID = new SqlParameter("@id", SqlDbType.Int) { Value = header_id };
            DataTable dt = DataLayer.GetLayer.FillData(sb.ToString(), prmID);

            string Plasiyer = TerminalBilgi(TerminalBilgiTip.PlasiyerNo, terminal_id);
            string kasaKodu = TerminalBilgi(TerminalBilgiTip.NakitKasaKodu, terminal_id);
            int vade = instance.CariVade(cari_kod);

            #region Değişkenler
            int _satir;
            int _promosyon_id;
            string _stok_kodu;
            decimal _miktar;
            decimal _fiyat;
            decimal _iskonto_oran1;
            decimal _iskonto_oran2;
            decimal _iskonto_oran3;
            decimal _iskonto_oran4;
            decimal _iskonto_oran5;
            bool yazdirildi = false;
            decimal _iskonto_tutar1;
            decimal _iskonto_tutar2;
            decimal _iskonto_tutar3;
            decimal _iskonto_tutar4;
            decimal _iskonto_tutar5;
            int tevkifatTipi = 0;
            decimal tevkifatTutari = 0;
            decimal _iskonto_genel_tutar1 = 0;
            decimal _iskonto_genel_tutar2 = 0;
            decimal _iskonto_genel_tutar3 = 0;
            decimal _iskonto_genel_tutar4 = 0;
            decimal _iskonto_genel_tutar5 = 0;
            int adres_no = 1;
            string yeni_aciklama = string.Empty;
            if (aciklama.Split(':').Length > 1)
            {
                adres_no = Convert.ToInt32(aciklama.Split(':')[1].Trim());
                yeni_aciklama = aciklama.Split(':')[0].Trim() + ':' + aciklama.Split(':')[2].Trim();
            }
            else
            {
                yeni_aciklama = aciklama;
            }

            Dictionary<int, decimal> kdv_tutarlari = new Dictionary<int, decimal>();
            for (int i = 0; i < 10; i++)
                kdv_tutarlari.Add(i, 0);

            int _kdv_orani;
            decimal _indirim_orani;
            decimal _satir_toplami;
            int _doviz;
            decimal _doviz_kur;


            int[] shar_cinsi;
            if (Config.GetConfig.GetValue(CParams.FaturayiIrsaliyeKaydet).ToLower() == "true")
            {
                shar_cinsi = instance.SatisIrsaliyesi_StokHar_EvrakTipi;
            }
            else
            {
                shar_cinsi = instance.SatisFaturasi_StokHar_EvrakTipi;
            }

            int[] char_cinsi = instance.SatisFaturasi_CariHar_EvrakTipi;
            #endregion

            Dictionary<string, decimal> _tevkifat = new Dictionary<string, decimal>();


            for (int i = 0; i < dt.Rows.Count; i++)
            {
                _satir = Convert.ToInt32(dt.Rows[i]["LINE_NUMBER"]);
                _promosyon_id = Convert.ToInt32(dt.Rows[i]["PROMO_ID"]);
                _stok_kodu = dt.Rows[i]["PRODUCT_CODE"].ToString();
                _miktar = Convert.ToDecimal(dt.Rows[i]["AMOUNT"]);
                _fiyat = Convert.ToDecimal(dt.Rows[i]["PRICE"]);
                _iskonto_oran1 = Convert.ToDecimal(dt.Rows[i]["DISCOUNT_RATE_1"]);
                _iskonto_oran2 = Convert.ToDecimal(dt.Rows[i]["DISCOUNT_RATE_2"]);
                _iskonto_oran3 = Convert.ToDecimal(dt.Rows[i]["DISCOUNT_RATE_3"]);
                _iskonto_oran4 = Convert.ToDecimal(dt.Rows[i]["DISCOUNT_RATE_4"]);
                _iskonto_oran5 = Convert.ToDecimal(dt.Rows[i]["DISCOUNT_RATE_5"]);
                _kdv_orani = Convert.ToInt32(dt.Rows[i]["VAT_RATE"]);
                _indirim_orani = Convert.ToDecimal(dt.Rows[i]["DISCOUNT_TOTAL"]);
                _satir_toplami = _miktar * _fiyat; //Convert.ToDecimal(dt.Rows[i]["LINE_TOTAL"]);
                _doviz = Convert.ToInt32(dt.Rows[i]["CURRENCY"]);
                _doviz_kur = Convert.ToDecimal(dt.Rows[i]["CURRENCY_RATE"]);
                yazdirildi = Convert.ToBoolean(dt.Rows[i]["PRINTED"]);

                tevkifatTipi = Convert.ToInt32(dt.Rows[i]["TEVKIFAT_TURU"]);
                tevkifatTutari = Convert.ToDecimal(dt.Rows[i]["TEVKIFAT_TUTARI"]);

                if (_kdv_orani > 0)
                {
                    if (_tevkifat.ContainsKey(GetTevkifatText(kdvSirasi(_kdv_orani), tevkifatTipi)))
                    {
                        _tevkifat[GetTevkifatText(kdvSirasi(_kdv_orani), tevkifatTipi)] += tevkifatTutari;
                    }
                    else
                    {
                        _tevkifat.Add(GetTevkifatText(kdvSirasi(_kdv_orani), tevkifatTipi), tevkifatTutari);
                    }
                }

                if (kdv_tutarlari.ContainsKey(kdvSirasi(_kdv_orani)))
                    kdv_tutarlari[kdvSirasi(_kdv_orani)] += _satir_toplami * _kdv_orani / 100;
                else
                    kdv_tutarlari.Add(kdvSirasi(_kdv_orani), _satir_toplami * _kdv_orani / 100);

                _iskonto_tutar1 = iskoto_tutar(_satir_toplami, _iskonto_oran1);
                _iskonto_tutar2 = iskoto_tutar(_satir_toplami - _iskonto_tutar1, _iskonto_oran2);
                _iskonto_tutar3 = iskoto_tutar(_satir_toplami - _iskonto_tutar1 - _iskonto_tutar2, _iskonto_oran3);
                _iskonto_tutar4 = iskoto_tutar(_satir_toplami - _iskonto_tutar1 - _iskonto_tutar2 - _iskonto_tutar3, _iskonto_oran4);
                _iskonto_tutar5 = iskoto_tutar(_satir_toplami - _iskonto_tutar1 - _iskonto_tutar2 - _iskonto_tutar3 - _iskonto_tutar4, _iskonto_oran5);

                _iskonto_genel_tutar1 += _iskonto_tutar1;
                _iskonto_genel_tutar2 += _iskonto_tutar2;
                _iskonto_genel_tutar3 += _iskonto_tutar3;
                _iskonto_genel_tutar4 += _iskonto_tutar4;
                _iskonto_genel_tutar5 += _iskonto_tutar5;

                instance.SharEkle(shar_cinsi[0], shar_cinsi[1], shar_cinsi[2], shar_cinsi[3], belge_tarihi,
                    evrak_seri, evrak_sira, _satir, _stok_kodu, cari_kod, _miktar, depoKod, depoKod, vade, Plasiyer, srmKod, "", _satir_toplami,
                    _iskonto_tutar1, _iskonto_tutar2, _iskonto_tutar3, _iskonto_tutar4, _iskonto_tutar5, kdvSirasi(_kdv_orani), "0", "0", _fiyat, "", "0", "0", adres_no, tevkifatTipi);

            }

            if (Config.GetConfig.GetValue(CParams.FaturayiIrsaliyeKaydet).ToLower() != "true")
            {
                instance.CariHarKaydet(char_cinsi[0], char_cinsi[1], Convert.ToBoolean(char_cinsi[2]), char_cinsi[3], evrak_seri, evrak_sira, belge_tarihi, belgeNo,
                    cari_kod, ara_toplam, genel_toplam, _iskonto_genel_tutar1, _iskonto_genel_tutar2, _iskonto_genel_tutar3, _iskonto_genel_tutar4,
                    _iskonto_genel_tutar5, 0, kdv_tutarlari[0], kdv_tutarlari[1], kdv_tutarlari[2], kdv_tutarlari[3], kdv_tutarlari[4], kdv_tutarlari[5], "0", "0", vade, srmKod, depoKod, Plasiyer, kasaKodu, yeni_aciklama, yazdirildi, _tevkifat);
            }

            return true;
        }

        bool SiparisEkle(int terminal_id, int evrak_tipi, string evrak_seri, int evrak_sira, string cari_kod, DateTime belge_tarihi, decimal ara_toplam, decimal kdv_toplam, decimal indirim_toplam, decimal genel_toplam, string depoKod, string srmKod, int header_id)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(" SELECT     detail.LINE_NUMBER,detail.PROMO_ID, detail.PRODUCT_CODE, detail.AMOUNT, detail.PRICE, detail.DISCOUNT_RATE_1,  \r\n");
            sb.Append(" detail.DISCOUNT_RATE_2, detail.DISCOUNT_RATE_3, detail.DISCOUNT_RATE_4, detail.DISCOUNT_RATE_5,detail.VAT_RATE, detail.DISCOUNT_TOTAL, detail.LINE_TOTAL, detail.LINE_NET_TOTAL,detail.CURRENCY, detail.CURRENCY_RATE \r\n");
            sb.Append(" FROM         INVOICE_HEADER as header INNER JOIN INVOICE_DETAILS as detail ON header.ID = detail.HEADER_ID \r\n");
            sb.Append(" WHERE     (detail.HEADER_ID = @id) \r\n");

            SqlParameter prmID = new SqlParameter("@id", SqlDbType.Int) { Value = header_id };
            DataTable dt = DataLayer.GetLayer.FillData(sb.ToString(), prmID);
            string Plasiyer = TerminalBilgi(TerminalBilgiTip.PlasiyerNo, terminal_id);

            #region Değişkenler
            string _cari_kod = string.Empty;
            string _evrak_seri = string.Empty;
            int _satir;
            int _promosyon_id;
            string _stok_kodu;
            decimal _miktar;
            decimal _fiyat;
            decimal _iskonto_oran1;
            decimal _iskonto_oran2;
            decimal _iskonto_oran3;
            decimal _iskonto_oran4;
            decimal _iskonto_oran5;

            decimal _iskonto_tutar1;
            decimal _iskonto_tutar2;
            decimal _iskonto_tutar3;
            decimal _iskonto_tutar4;
            decimal _iskonto_tutar5;

            decimal _iskonto_genel_tutar1 = 0;
            decimal _iskonto_genel_tutar2 = 0;
            decimal _iskonto_genel_tutar3 = 0;
            decimal _iskonto_genel_tutar4 = 0;
            decimal _iskonto_genel_tutar5 = 0;

            Dictionary<int, decimal> kdv_tutarlari = new Dictionary<int, decimal>();
            for (int i = 0; i < 10; i++)
                kdv_tutarlari.Add(i, 0);

            int _kdv_orani;
            decimal _indirim_orani;
            decimal _satir_toplami;
            int _doviz;
            decimal _doviz_kur;

            int[] shar_cinsi = instance.SatisFaturasi_StokHar_EvrakTipi;
            int[] char_cinsi = instance.SatisFaturasi_CariHar_EvrakTipi;
            #endregion

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                _satir = Convert.ToInt32(dt.Rows[i]["LINE_NUMBER"]);
                _promosyon_id = Convert.ToInt32(dt.Rows[i]["PROMO_ID"]);
                _stok_kodu = dt.Rows[i]["PRODUCT_CODE"].ToString();
                _miktar = Convert.ToDecimal(dt.Rows[i]["AMOUNT"]);
                _fiyat = Convert.ToDecimal(dt.Rows[i]["PRICE"]);
                _iskonto_oran1 = Convert.ToDecimal(dt.Rows[i]["DISCOUNT_RATE_1"]);
                _iskonto_oran2 = Convert.ToDecimal(dt.Rows[i]["DISCOUNT_RATE_2"]);
                _iskonto_oran3 = Convert.ToDecimal(dt.Rows[i]["DISCOUNT_RATE_3"]);
                _iskonto_oran4 = Convert.ToDecimal(dt.Rows[i]["DISCOUNT_RATE_4"]);
                _iskonto_oran5 = Convert.ToDecimal(dt.Rows[i]["DISCOUNT_RATE_5"]);
                _kdv_orani = Convert.ToInt32(dt.Rows[i]["VAT_RATE"]);
                _indirim_orani = Convert.ToDecimal(dt.Rows[i]["DISCOUNT_TOTAL"]);
                _satir_toplami = _miktar * _fiyat; //Convert.ToDecimal(dt.Rows[i]["LINE_TOTAL"]);
                _doviz = Convert.ToInt32(dt.Rows[i]["CURRENCY"]);
                _doviz_kur = Convert.ToDecimal(dt.Rows[i]["CURRENCY_RATE"]);

                if (kdv_tutarlari.ContainsKey(kdvSirasi(_kdv_orani)))
                    kdv_tutarlari[kdvSirasi(_kdv_orani)] += _satir_toplami * _kdv_orani / 100;
                else
                    kdv_tutarlari.Add(kdvSirasi(_kdv_orani), _satir_toplami * _kdv_orani / 100);

                _iskonto_tutar1 = iskoto_tutar(_satir_toplami, _iskonto_oran1);
                _iskonto_tutar2 = iskoto_tutar(_satir_toplami - _iskonto_tutar1, _iskonto_oran2);
                _iskonto_tutar3 = iskoto_tutar(_satir_toplami - _iskonto_tutar1 - _iskonto_tutar2, _iskonto_oran3);
                _iskonto_tutar4 = iskoto_tutar(_satir_toplami - _iskonto_tutar1 - _iskonto_tutar2 - _iskonto_tutar3, _iskonto_oran4);
                _iskonto_tutar5 = iskoto_tutar(_satir_toplami - _iskonto_tutar1 - _iskonto_tutar2 - _iskonto_tutar3 - _iskonto_tutar4, _iskonto_oran5);

                _iskonto_genel_tutar1 += _iskonto_tutar1;
                _iskonto_genel_tutar2 += _iskonto_tutar2;
                _iskonto_genel_tutar3 += _iskonto_tutar3;
                _iskonto_genel_tutar4 += _iskonto_tutar4;
                _iskonto_genel_tutar5 += _iskonto_tutar5;

                _cari_kod = string.Empty;
                _evrak_seri = string.Empty;
                switch (_doviz)
                {
                    case 1:
                        _cari_kod = cari_kod + ".USD";
                        _evrak_seri = evrak_seri + "U";
                        break;
                    case 2:
                        _cari_kod = cari_kod + ".EUR";
                        _evrak_seri = evrak_seri + "E";
                        break;
                    case 0:
                        _cari_kod = cari_kod;
                        _evrak_seri = evrak_seri;
                        break;
                }

                instance.AlinanSipEkle(belge_tarihi, _evrak_seri, evrak_sira, _satir, _stok_kodu, _cari_kod, _miktar, depoKod, depoKod, Plasiyer, srmKod, "0", _satir_toplami,
                    _iskonto_tutar1, _iskonto_tutar2, _iskonto_tutar3, _iskonto_tutar4, _iskonto_tutar5, kdvSirasi(_kdv_orani), _fiyat, "", "0", "0", _doviz, _doviz_kur);

            }

            return true;
        }

        bool SevkEkle(int terminal_id, int evrak_tipi, string evrak_seri, int evrak_sira)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(" SELECT    * FROM         STOCK_MOVEMENT \r\n");
            sb.Append(" WHERE     (TERMINAL_ID = @terminal) AND (DOCUMENT_TYPE = @tip) AND (DOCUMENT_SERIAL = @seri) AND (DOCUMENT_NUMBER = @sira) \r\n");

            SqlParameter p1 = new SqlParameter("@terminal", SqlDbType.Int) { Value = terminal_id };
            SqlParameter p2 = new SqlParameter("@tip", SqlDbType.Int) { Value = evrak_tipi };
            SqlParameter p3 = new SqlParameter("@seri", SqlDbType.VarChar) { Value = evrak_seri };
            SqlParameter p4 = new SqlParameter("@sira", SqlDbType.Int) { Value = evrak_sira };

            DataTable dt = DataLayer.GetLayer.FillData(sb.ToString(), p1, p2, p3, p4);
            string Plasiyer = TerminalBilgi(TerminalBilgiTip.PlasiyerNo, terminal_id);

            #region Değişkenler
            int _satir;
            int _promosyon_id;
            string _stok_kodu;
            decimal _miktar;
            decimal _fiyat;
            decimal _iskonto_oran1;
            decimal _iskonto_oran2;
            decimal _iskonto_oran3;
            decimal _iskonto_oran4;
            decimal _iskonto_oran5;

            decimal _iskonto_tutar1;
            decimal _iskonto_tutar2;
            decimal _iskonto_tutar3;
            decimal _iskonto_tutar4;
            decimal _iskonto_tutar5;

            decimal _iskonto_genel_tutar1 = 0;
            decimal _iskonto_genel_tutar2 = 0;
            decimal _iskonto_genel_tutar3 = 0;
            decimal _iskonto_genel_tutar4 = 0;
            decimal _iskonto_genel_tutar5 = 0;

            Dictionary<int, decimal> kdv_tutarlari = new Dictionary<int, decimal>();
            for (int i = 0; i < 10; i++)
                kdv_tutarlari.Add(i, 0);

            int _kdv_orani;
            decimal _indirim_orani;
            decimal _satir_toplami;
            int _doviz;
            decimal _doviz_kur;
            string cari_kod = "";
            string girisDepo = "";
            string cikisDepo = "";
            DateTime belge_tarihi = DateTime.Now;
            decimal ara_toplam = 0;
            decimal genel_toplam = 0;
            bool son_satir = false;


            int[] shar_cinsi = instance.DepoSevkEvrakTipi;

            #endregion

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                _satir = Convert.ToInt32(dt.Rows[i]["LINE_NUMBER"]);
                _promosyon_id = 0;
                _stok_kodu = dt.Rows[i]["PRODUCT_CODE"].ToString();
                _miktar = Convert.ToDecimal(dt.Rows[i]["AMOUNT"]);
                _fiyat = Convert.ToDecimal(dt.Rows[i]["PRICE"]);
                cari_kod = dt.Rows[i]["CUSTOMER_CODE"].ToString();

                girisDepo = dt.Rows[i]["LOADING_STORE"].ToString(); //hedef depo terminalin deposu
                cikisDepo = dt.Rows[i]["STORE_ID"].ToString(); // kaynak depo karşı depo

                belge_tarihi = Convert.ToDateTime(dt.Rows[i]["DOCUMENT_DATE"]);
                _iskonto_oran1 = 0;
                _iskonto_oran2 = 0;
                _iskonto_oran3 = 0;
                _iskonto_oran4 = 0;
                _iskonto_oran5 = 0;
                _kdv_orani = Convert.ToInt32(dt.Rows[i]["VAT_RATE"]);
                _indirim_orani = 0;
                _satir_toplami = _miktar * _fiyat;
                _doviz = 0;
                _doviz_kur = 1;
                ara_toplam += _satir_toplami;
                genel_toplam += (_satir_toplami * ((_kdv_orani + 100) / 100));

                if (kdv_tutarlari.ContainsKey(kdvSirasi(_kdv_orani)))
                    kdv_tutarlari[kdvSirasi(_kdv_orani)] += _satir_toplami * _kdv_orani / 100;
                else
                    kdv_tutarlari.Add(kdvSirasi(_kdv_orani), _satir_toplami * _kdv_orani / 100);


                _iskonto_tutar1 = iskoto_tutar(_satir_toplami, _iskonto_oran1);
                _iskonto_tutar2 = iskoto_tutar(_satir_toplami - _iskonto_tutar1, _iskonto_oran2);
                _iskonto_tutar3 = iskoto_tutar(_satir_toplami - _iskonto_tutar1 - _iskonto_tutar2, _iskonto_oran3);
                _iskonto_tutar4 = iskoto_tutar(_satir_toplami - _iskonto_tutar1 - _iskonto_tutar2 - _iskonto_tutar3, _iskonto_oran4);
                _iskonto_tutar5 = iskoto_tutar(_satir_toplami - _iskonto_tutar1 - _iskonto_tutar2 - _iskonto_tutar3 - _iskonto_tutar4, _iskonto_oran5);

                _iskonto_genel_tutar1 += _iskonto_tutar1;
                _iskonto_genel_tutar2 += _iskonto_tutar2;
                _iskonto_genel_tutar3 += _iskonto_tutar3;
                _iskonto_genel_tutar4 += _iskonto_tutar4;
                _iskonto_genel_tutar5 += _iskonto_tutar5;

                if (i == dt.Rows.Count - 1)
                {
                    son_satir = true;
                }

                instance.DepoSevkEkle(shar_cinsi[0], shar_cinsi[1], shar_cinsi[2], shar_cinsi[3], belge_tarihi,
    evrak_seri, evrak_sira, _satir, _stok_kodu, cari_kod, _miktar, girisDepo, cikisDepo, 0, Plasiyer, "", "", _satir_toplami,
    _iskonto_tutar1, _iskonto_tutar2, _iskonto_tutar3, _iskonto_tutar4, _iskonto_tutar5, kdvSirasi(_kdv_orani), "0", "0", _fiyat, "", "0", "0", son_satir);

            }

            return true;
        }

        bool IadeEkle(int terminal_id, int evrak_tipi, string evrak_seri, int evrak_sira, string belgeNo)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(" SELECT    * FROM         STOCK_MOVEMENT \r\n");
            sb.Append(" WHERE     (TERMINAL_ID = @terminal) AND (DOCUMENT_TYPE = @tip) AND (DOCUMENT_SERIAL = @seri) AND (DOCUMENT_NUMBER = @sira) \r\n");

            SqlParameter p1 = new SqlParameter("@terminal", SqlDbType.Int) { Value = terminal_id };
            SqlParameter p2 = new SqlParameter("@tip", SqlDbType.Int) { Value = evrak_tipi };
            SqlParameter p3 = new SqlParameter("@seri", SqlDbType.VarChar) { Value = evrak_seri };
            SqlParameter p4 = new SqlParameter("@sira", SqlDbType.Int) { Value = evrak_sira };

            DataTable dt = DataLayer.GetLayer.FillData(sb.ToString(), p1, p2, p3, p4);
            string srmMerkezi = TerminalBilgi(TerminalBilgiTip.SorumlulukMerkezi, terminal_id);
            string Plasiyer = TerminalBilgi(TerminalBilgiTip.PlasiyerNo, terminal_id);
            string kasaKodu = TerminalBilgi(TerminalBilgiTip.NakitKasaKodu, terminal_id);

            #region Değişkenler
            int _satir;
            int _promosyon_id;
            string _stok_kodu;
            decimal _miktar;
            decimal _fiyat;
            decimal _iskonto_oran1;
            decimal _iskonto_oran2;
            decimal _iskonto_oran3;
            decimal _iskonto_oran4;
            decimal _iskonto_oran5;

            decimal _iskonto_tutar1;
            decimal _iskonto_tutar2;
            decimal _iskonto_tutar3;
            decimal _iskonto_tutar4;
            decimal _iskonto_tutar5;

            decimal _iskonto_genel_tutar1 = 0;
            decimal _iskonto_genel_tutar2 = 0;
            decimal _iskonto_genel_tutar3 = 0;
            decimal _iskonto_genel_tutar4 = 0;
            decimal _iskonto_genel_tutar5 = 0;

            Dictionary<int, decimal> kdv_tutarlari = new Dictionary<int, decimal>();
            for (int i = 0; i < 10; i++)
                kdv_tutarlari.Add(i, 0);

            int _kdv_orani;
            decimal _indirim_orani;
            decimal _satir_toplami;
            int _doviz;
            decimal _doviz_kur;
            string cari_kod = "";
            string depoKod = "";
            DateTime belge_tarihi = DateTime.Now;
            decimal ara_toplam = 0;
            decimal genel_toplam = 0;
            int adresNo;

            int[] shar_cinsi = instance.IadeFaturasi_StokHar_EvrakTipi;
            int[] char_cinsi = instance.IadeFaturasi_CariHar_EvrakTipi;

            Dictionary<string, decimal> _tevkifat = new Dictionary<string, decimal>();

            #endregion

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                _satir = Convert.ToInt32(dt.Rows[i]["LINE_NUMBER"]);
                _promosyon_id = 0;
                _stok_kodu = dt.Rows[i]["PRODUCT_CODE"].ToString();
                _miktar = Convert.ToDecimal(dt.Rows[i]["AMOUNT"]);
                _fiyat = Convert.ToDecimal(dt.Rows[i]["PRICE"]);
                cari_kod = dt.Rows[i]["CUSTOMER_CODE"].ToString();
                depoKod = dt.Rows[i]["STORE_ID"].ToString();
                belge_tarihi = Convert.ToDateTime(dt.Rows[i]["DOCUMENT_DATE"]);
                belge_tarihi = new DateTime(belge_tarihi.Year, belge_tarihi.Month, belge_tarihi.Day);
                _iskonto_oran1 = Convert.ToDecimal(dt.Rows[i]["ISKONTO1"]);
                _iskonto_oran2 = Convert.ToDecimal(dt.Rows[i]["ISKONTO2"]);
                _iskonto_oran3 = Convert.ToDecimal(dt.Rows[i]["ISKONTO3"]);
                _iskonto_oran4 = Convert.ToDecimal(dt.Rows[i]["ISKONTO4"]);
                _iskonto_oran5 = Convert.ToDecimal(dt.Rows[i]["ISKONTO5"]);
                _kdv_orani = Convert.ToInt32(dt.Rows[i]["VAT_RATE"]);
                _indirim_orani = 0;
                _satir_toplami = _miktar * _fiyat;
                _doviz = 0;
                _doviz_kur = 1;
                ara_toplam += _satir_toplami;
                adresNo = Convert.ToInt32(dt.Rows[i]["ADRES_NO"]);

                if (kdv_tutarlari.ContainsKey(kdvSirasi(_kdv_orani)))
                    kdv_tutarlari[kdvSirasi(_kdv_orani)] += _satir_toplami * _kdv_orani / 100;
                else
                    kdv_tutarlari.Add(kdvSirasi(_kdv_orani), _satir_toplami * _kdv_orani / 100);


                _iskonto_tutar1 = iskoto_tutar(_satir_toplami, _iskonto_oran1);
                _iskonto_tutar2 = iskoto_tutar(_satir_toplami - _iskonto_tutar1, _iskonto_oran2);
                _iskonto_tutar3 = iskoto_tutar(_satir_toplami - _iskonto_tutar1 - _iskonto_tutar2, _iskonto_oran3);
                _iskonto_tutar4 = iskoto_tutar(_satir_toplami - _iskonto_tutar1 - _iskonto_tutar2 - _iskonto_tutar3, _iskonto_oran4);
                _iskonto_tutar5 = iskoto_tutar(_satir_toplami - _iskonto_tutar1 - _iskonto_tutar2 - _iskonto_tutar3 - _iskonto_tutar4, _iskonto_oran5);

                _iskonto_genel_tutar1 += _iskonto_tutar1;
                _iskonto_genel_tutar2 += _iskonto_tutar2;
                _iskonto_genel_tutar3 += _iskonto_tutar3;
                _iskonto_genel_tutar4 += _iskonto_tutar4;
                _iskonto_genel_tutar5 += _iskonto_tutar5;

                genel_toplam += ((_satir_toplami - _iskonto_tutar1 - _iskonto_tutar2 - _iskonto_tutar3 - _iskonto_tutar4 - _iskonto_tutar5) * ((_kdv_orani + 100m) / 100m));

                instance.SharEkle(shar_cinsi[0], shar_cinsi[1], shar_cinsi[2], shar_cinsi[3], belge_tarihi,
                    evrak_seri, evrak_sira, _satir, _stok_kodu, cari_kod, _miktar, depoKod, depoKod, 0, Plasiyer, "", "", _satir_toplami,
                    _iskonto_tutar1, _iskonto_tutar2, _iskonto_tutar3, _iskonto_tutar4, _iskonto_tutar5, kdvSirasi(_kdv_orani), "0", "0", _fiyat, "", "0", "0", adresNo, 0);

            }

            instance.CariHarKaydet(char_cinsi[0], char_cinsi[1], Convert.ToBoolean(char_cinsi[2]), char_cinsi[3], evrak_seri, evrak_sira, belge_tarihi, belgeNo,
                cari_kod, ara_toplam, genel_toplam, _iskonto_genel_tutar1, _iskonto_genel_tutar2, _iskonto_genel_tutar3, _iskonto_genel_tutar4,
                _iskonto_genel_tutar5, 0, kdv_tutarlari[0], kdv_tutarlari[1], kdv_tutarlari[2], kdv_tutarlari[3], kdv_tutarlari[4], kdv_tutarlari[5], "0", "0", 0, srmMerkezi, depoKod, Plasiyer, kasaKodu, "", false, _tevkifat);

            return true;
        }

        #region IDisposable Members

        public void Dispose()
        {
            GC.SuppressFinalize(this);
        }

        #endregion
    }
}